package com.example.inner_class;

/**
 * java 是单继承的，内部类可以继承类，切不受外部类的继承影响
 * 解决单继承，更加完整
 */
public class test {
    public static void main(String[] args) {
        /**
         * 1.成员内部类：可以访问外部类的所有方法，
         * 实现外部类，才能调用内部类
         */
        System.out.println("------------成员内部类------------");
        MyMemberInnerClass myMemberInnerClass = new MyMemberInnerClass();
        MyMemberInnerClass.MemberInnerClass memberInnerClass = myMemberInnerClass.new MemberInnerClass();
        memberInnerClass.hello();
        memberInnerClass.father2Speak();
        myMemberInnerClass.father1Speak();
        /**
         * 2.静态内部类:只能访问外部类的静态方法，
         * 可以直接通过外部类调用
         */
        System.out.println("------------静态内部类------------");
        MyStaticInnerClass.StaticInnerClass staticInnerClass = new MyStaticInnerClass.StaticInnerClass();
        staticInnerClass.hello();
        staticInnerClass.father2Speak();
        /**
         * 3.局部内部类（方法内部类）
         * 可以调用外部类的全部方法，成员变量
         * 它实现必须在方法里面实现，切只能在方法里面执行方法
         */
        System.out.println("------------局部（方法）内部类------------");
        MyMethodInnerClass myMethodInnerClass = new MyMethodInnerClass();
        myMethodInnerClass.method();
        /**
         * 4.匿名内部类
         */
        System.out.println("------------匿名内部类------------");
        AnonymousInnerClass anonymousInnerClass = new AnonymousInnerClass();
        anonymousInnerClass.dog();


    }
}


